﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DllDezzerDev;
using DllDeezerDev;

namespace DllDezzerDev
{
    /// <summary>
    /// Class Album
    /// </summary>
    public class Album
    {
        #region Champs

        private string _id = "inconnue";
        private string _title = "inconnue";
        private string _cover = "inconnue";
        private string _genre_id = "inconnue";
        private string _type = "inconnue";
        internal List<Track> _lesTracks = new List<Track>();
        internal Artist _theArtist = new Artist();
        private int _nbTracks = 0;

        #endregion

        #region Proprieté
        /// <summary>
        /// Id de l'album
        /// </summary>
        public string id
        {
            get { return _id; }
            set { _id = value; }
        }
        /// <summary>
        /// Titre de l'album
        /// </summary>
        public string title
        {
            get { return _title; }
            set { _title = value; }
        }
        /// <summary>
        /// Image de l'album
        /// </summary>
        public string cover
        {
            get { return _cover; }
            set { _cover = value; }
        }
        /// <summary>
        /// Id du genre de l'album
        /// </summary>
        public string genre_id
        {
            get { return _genre_id; }
            set { _genre_id = value; }
        }
        /// <summary>
        /// Type de l'album
        /// </summary>
        public string type
        {
            get { return _type; }
            set { _type = value; }
        }
        /// <summary>
        /// List des Tracks de l'album
        /// </summary>
        internal List<Track> lesTracks
        {
            get { return _lesTracks; }
            set { _lesTracks = value; }
        }
        /// <summary>
        /// L'artist de l'album
        /// </summary>
        internal Artist theArtist
        {
            get { return _theArtist; }
            set { _theArtist = value; }
        }
        /// <summary>
        /// Nombres des tracks dans l'album
        /// </summary>
        public int nbTracks
        {
            get { return _nbTracks; }
            set { _nbTracks = value; }
        }
        #endregion

        #region Constructeurs
        /// <summary>
        /// Initialise une nouvelle instance par défaut de la classe unAlbum.
        /// Les propriétés de l'Album ne peuvent pas être modifiées par la suite.
        /// </summary>
        public Album()
        {
        }

        /// <summary>
        /// Initialise une nouvelle instance de la classe Album.
        /// </summary>
        /// <param name="id">Identifiant de l'Album</param>
        /// <param name="title">Titre de l'Album</param>
        /// <param name="cover">Image de l'album</param>
        /// <param name="theArtiste">Artiste de l'album</param>
        
        public Album(string id, string title, string cover,Artist theArtiste)
        {
            this.id = id;
            this.title = title;
            this.cover = cover;
            this.theArtist = theArtiste;
            
        }

        /// <summary>
        /// Initialise une nouvelle instance de la classe unAlbum.
        /// </summary>
        /// <param name="id">Identifiant de l'Album</param>
        /// <param name="title">Titre de l'Album</param>
        /// <param name="cover">Lien de l'image de l'Album</param>
        /// <param name="genre_id">Genre de l'album</param>
        /// <param name="type">Type de l'album</param>
        public Album(string id, string title, string cover,string genre_id,string type)
        {
            this.id = id;
            this.title = title;
            this.cover= cover;
            this.genre_id=genre_id;
            this.type=type;

        }

        /// <summary>
        /// Initialise une nouvelle instance de la classe unAlbum.
        /// </summary>
        /// <param name="id">Identifiant de l'Album</param>
        /// <param name="title">Titre de l'Album</param>
        /// <param name="cover">Lien de l'image de l'Album</param>
        /// <param name="genre_id">Genre de l'album</param>
        /// <param name="type">Type de l'album</param>
        /// <param name="lesTracks">Track de l'Album</param>
        /// <param name="theArtist">Artist de l'album</param>
        public Album(string id, string title, string cover, string genre_id, string type,List<Track> lesTracks,Artist theArtist)
        {
            this.id = id;
            this.title = title;
            this.cover = cover;
            this.genre_id = genre_id;
            this.type = type;
            this.lesTracks = lesTracks;
            this.theArtist = theArtist;

        }
        #endregion

        #region Methodes
        /// <summary>
        /// Ajoute un track a la collection des track
        /// </summary>
        /// <param name="unTrack">objet de type track</param>
        public void addTrack(Track unTrack)
        {
            if (lesTracks == null) lesTracks = new List<Track>();
            this.lesTracks.Add(unTrack);
            this.nbTracks++;
        }
        /// <summary>
        /// Renvois une liste des tracks de l'album
        /// </summary>
        /// <returns></returns>
        public List<Track> getLesTracks()
        {
            List<Track> copieDesTrack = new List<Track>();
            foreach (Track unTrack in lesTracks)
            {
                copieDesTrack.Add(unTrack);
            }
            return copieDesTrack;
        }
        /// <summary>
        /// Renvois l'artist de l'album
        /// </summary>
        /// <returns></returns>
        public Artist getArtist()
        {
            return this.theArtist;
        }
        #endregion


    }
}
